package DesignPatterns.SimpleFactory;

import java.util.concurrent.ConcurrentHashMap;

/**
 * 简单工厂
 * 优点：集中创建对象，当创建对象的过程需要变更时只需要微调部分代码即可，
 * 因为真实场景中是有一些对象的创建是需要依赖很多的其他信息的，比如数据库连接的创建等。
 */
public class SimpleFactory {
    public static ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();
    
    public static Object getInstance(String className) throws Exception{
        if(map.containsKey(className)){
            return map.get(className);
        }
        //使用反射机制加载指定的类，并通过调用该类的无参构造函数来创建一个新的实例。
        map.put(className,Class.forName(className).newInstance());
        return map.get(className);
    }
}
